// 创建和更新记录
// 1. 以openid 为用户id来添加更新删除数据（ 更改同一条数据 ）
// 2. 包含所有邮卡、更新时间、随机奖品

const cloud = require('wx-server-sdk')

cloud.init();
// 
const db = cloud.database();
const col = db.collection('lesson020');
const _ = db.command;

// 云函数入口函数
exports.main = async(event, context) => {
  const wxContext = cloud.getWXContext();

  // 查询该用户在数据库中的记录
  let user = await col.where({
    '_openid': wxContext.OPENID
  }).get();


  let type;
  // 随机邮字 
  let rand = Math.random();
  switch (true) {
    case (rand < 0.3):
      type = 0;
      break;
    case (rand < 0.6 && rand >= 0.3):
      type = 1;
      break;
    case (rand < 0.9 && rand >= 0.6):
      type = 2;
      break;
    case (rand >= 0.9):
      type = 3;
      break;
  }


  // 用户记录长度为0，代表第一次使用，使用add操作
  if (user.data.length == 0) {

    let words = [{
        name: '邮家贷',
        type: 0,
        number: 0
      },
      {
        name: '邮薪贷',
        type: 1,
        number: 0
      },
      {
        name: '邮学贷',
        type: 2,
        number: 0
      },
      {
        name: '邮掌柜',
        type: 3,
        number: 0
      }
    ];
    // 控制随机一个字 +1
    words[type].number += 1

    let data = {
      '_openid': wxContext.OPENID,
      'words': words,
      updateTime: getDay(),
      times: 1,
      prize: null
    }

    let result = await col.add({
      data: data
    })

    return {
      msg: '添加成功',
      result: result
    }
  }else{
    // 除第一外，都是更新操作
    user = user.data[0];

    if(user.times <= 0 && user.updateTime == getDay() ){
      return {
        msg: '今天次数已经用完，明天继续~~',
        success: false
      }
    }
    // times代表剩余次数，在第二天时重置
    let times ;
    if (user.updateTime !== getDay() ){
      times = 1;
    }
    // 增加一个
    user.words[type].number += 1;
    let result = await col.where({
      '_openid': wxContext.OPENID
    }).update({
      data: {
        'words':user.words,
        // 可用次数-1
        'times': times || _.inc(-1),
        // 获取今天日期
        'updateTime': getDay()
      }
    });
    
    return {
      msg: '修改成功',
      result: result
    }
  }
}

function getDay(){
  let d = new Date(); 
  return d.getFullYear() + '-' + (d.getMonth()+1) + '-' +d.getDate();
}